package cn.yunhe.dao;


import cn.yunhe.entity.Field;
import cn.yunhe.entity.Question;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

@Repository
public interface QuestionDao {

    /**
     * 单个添加
     * @return 成功与否
     */
    boolean addQuestion(Question question);
    /**
     * 修改试题
     *
     */
    boolean upd(Question question);
    /**
     * 删除试题知识点中间表数据
     */
    boolean delQuestionPoint(@Param("questionId") Integer questionId);
    /**
     * 删除试题知识点中间表数据
     */
    boolean addQuestionPoint(@Param("questionId") Integer questionId, @Param("pointId") Integer pointId);

    /**
     * 试题搜索
     * @param question
     * @return
     */

    List<Question> queryQuestion(Question question);

    /**
     * 试题搜索总数
     * @param question
     * @return
     */
    Integer queryQuestionCount(Question question);

    /**
     * 批量查询试题详情
     * @return 试题集
     */
    List<Question> queryQuestionByList(List<Question> list);

    /**
     *查询试题详情
     * @return 试题
     */
    Question queryQuestionById(Integer id);


    /**
     * (发布考试时执行)
     * 根据试卷要求的题目数目,知识点,随机获取多道题目ID
     * @param map
     * @return
     * Map中包含数据 int QuestionCount, List<Integer> PointId
     * 郭瀚钰
     */
    List<Question> getSeveralQuestion(Map<String,Object> map);


    int getQuestionCount();

    /**
     * (发布考试,抽取试题后循环执行)
     * 循环将数据插入试卷,试题关系表中
     * @param map
     * Map中包含数据 int ExamPaperId,int QuestionId,
     * @return
     * 郭瀚钰
     */
    boolean addQuestionsToExamPaper(Map map);


    /**
     * 根据传入试卷Id 获取所属试题集合
     * @param examPaperId
     * @return
     */
    List<Question> getQuestionsByExamPaperId(Integer examPaperId);


    /**
     * 根据传入试卷Id批量删除其所有试题
     * @param examPaperList
     * @return
     * guohanyu
     */
    boolean delExamPapersQuestion(@Param("examPaperIdList")List<Integer> examPaperList);

    /**
     * 从试卷中移除某道题目
     * @param map 封装数据 试卷examPaperId,试题questionId
     * @return
     * guohanyu
     */
    boolean removeQuestionFromExamPaper(Map<String,Object> map);


    /**
     * (发布考试时执行)
     * 根据试卷要求的题目数目,知识点,随机获取多道题目(判断题)
     * @param map
     * @return
     * Map中包含数据 int JudgmentQuestionCount, List<Integer> PointId
     * 郭瀚钰
     */
    List<Question> getSeveralJudgmentQuestion(Map<String,Object> map);


    /**
     * 获取每科题目数目
     * @return questionCount
     * 郭瀚钰
     */
    List<Field> getQuestionCountGroupByFieldId();
}